package ctu.edu.vn.musicmanager.business;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Random;
import java.util.Vector;

import javax.swing.table.DefaultTableModel;

import org.apache.commons.codec.binary.Base64;

public class BMusicManager {
	// Tách dữ liệu từ server trả về
	public Vector<Vector<String>> Split(String str) {
		Vector<Vector<String>> res = new Vector<Vector<String>>();
		String tmp = "";
		Vector<String> curLine = new Vector<String>();
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) == '\n') {
				curLine.add(tmp);
				res.add(curLine);
				curLine = new Vector<String>();
				tmp = "";
				continue;
			}
			if (str.charAt(i) == ':') {
				curLine.add(tmp);
				tmp = "";
				continue;
			} else
				tmp += str.charAt(i);
		}
		curLine.add(tmp);
		res.add(curLine);

		return res;
	}

	// Tạo chuỗi khác biệt
	public String Randomize() {
		String str = "";
		String Pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
		Random rd = new Random();
		for (int i = 0; i < 62; i++) {
			int k = rd.nextInt(62);
			str += Pattern.charAt(k);
		}
		return str;
	}

	// Làm rỗng table
	public void clearTable(DefaultTableModel model) {
		while (model.getRowCount() > 0)
			model.removeRow(0);
		return;
	}

	// Cập nhật dữ liệu table
	public void updatetoTable(int id, String newname, DefaultTableModel model) {
		for (int i = 0; i < model.getRowCount(); i++)
			if ((int) (model.getValueAt(i, 3)) == id) {
				model.setValueAt(newname, i, 1);
				break;
			}
	}

	// Thêm dữ liệu vào server
	public void addtoTable(int id, String name, String format,
			DefaultTableModel model) {
		Vector<Object> ob = new Vector<Object>();
		ob.add(false);
		ob.add(name);
		ob.add(format);
		ob.add(id);
		model.addRow(ob);
	}

	// Xóa dữ liệu từ server
	public void deletetoTable(int id, DefaultTableModel model) {
		for (int i = 0; i < model.getRowCount(); i++)
			if ((int) (model.getValueAt(i, 3)) == id) {
				model.removeRow(i);
				break;
			}
	}

	// Hàm đọc file và mã hóa thành kiểu String
	public String readToString(String aInputFileName) {
		try {
			File file = new File(aInputFileName);
			if ((!file.getName().substring(file.getName().lastIndexOf('.') + 1)
					.toUpperCase().equals("MP3"))
					|| file.length() >= 10 * 1024 * 1024)
				return null;
			byte[] result = new byte[(int) file.length()];
			InputStream input = null;
			int totalBytesRead = 0;
			input = new BufferedInputStream(new FileInputStream(file));
			while (totalBytesRead < result.length) {
				int bytesRemaining = result.length - totalBytesRead;
				int bytesRead = input.read(result, totalBytesRead,
						bytesRemaining);
				if (bytesRead > 0) {
					totalBytesRead = totalBytesRead + bytesRead;
				}
			}

			input.close();
			return new String(Base64.encodeBase64(result));
		} catch (Exception ex) {
			return null;
		}
	}

	// Tạo message thêm dữ liệu
	public String pre_addSongs(String name, String format, String data) {
		return "\n" + name + ":" + format.toUpperCase() + "\n" + data;
	}

	// Tạo message cập nhật dữ liệu
	public String pre_editSongs(Vector<Integer> ids, Vector<String> newnames) {
		String res = "";
		for (int i = 0; i < ids.size(); i++) {
			res += "\n" + ids.get(i) + ":" + newnames.get(i);
		}
		return res;
	}

	// Tạo message xóa dữ liệu
	public String pre_deleteSongs(Vector<Integer> ids) {
		String res = "";
		for (int i = 0; i < ids.size(); i++) {
			res += "\n" + ids.get(i);
		}
		return res;
	}

	// Lấy lỗi từ mã lỗi
	public String getErr(int number) {
		switch (number) {
		case 1:
			return "Kết nối đến Server thất bại!";
		case 2:
			return "Server quá tải!";
		case 11:
			return "Thêm thất bại";
		case 21:
			return "Tập tin đã bị xóa!";
		case 31:
			return "Tập tin không tồn tại";
		default:
			return "Có lỗi xảy ra!";
		}
	}

}
